package com.shiguiwu.springmybatis.spring.beanFactory;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

import java.util.Map;

/**
 * @description: BeanFactory扩展
 * @author: stone
 * @date: Created by 2021/4/28 23:44
 * @version: 1.0.0
 * @pakeage: com.shiguiwu.springmybatis.spring.beanFactory
 *
 * 使用注意
 * BeanFactoryPostProcessor 接口的使用有一个需要注意的地方，在其 postProcessBeanFactory 方
 * 法中，强烈禁止去通过容器获取其他bean，此时会导致bean的提前初始化，会出现一些意想不到的问
 * 题，因为这个阶段中 BeanPostProcessor 还未准备好，本文开头4个阶段中有介绍，
 * BeanPostProcessor 是在第3个阶段中注册到spring容器的，而 BeanPostProcessor 可以对bean的创
 * 建过程进行干预，比如spring中的aop就是在 BeanPostProcessor 的一些子类中实现的， @Autowired
 * 也是在 BeanPostProcessor 的子类中处理的，此时如果去获取bean，此时bean不会被
 * BeanPostProcessor 处理，所以创建的bean可能是有问题的，还是通过一个案例给大家演示一下把，
 * 通透一些。
 */
//@ComponentScan
public class BeanFactoryTests {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanFactoryTests.class);
//        context.refresh();
        Map<String, String> beansOfType = context.getBeansOfType(String.class);

        System.out.println(beansOfType);

    }
}
